/*
 * Toto je stack stavů implementovaný jako double-linked list. Tj. každý element
 * si drží odkaz na předchozí i následující element. Není implementován jako
 * cyklický, má tedy dva konce (odkazy na NULL).
 */
#ifndef STACK_H_
#define STACK_H_

#include "state.h"

typedef struct SNODE Snode;

struct SNODE {
	State *value;
	Snode *next;
};

typedef struct {
	Snode *top;
	int size;
} Stack;


void stackDisplay(Stack *s);
State * stackTop(Stack* s);
Stack* stackInit(void);
State* stackPop(Stack *);
void stackPush(Stack*, State *state);
int stackSize(Stack*);

#endif
